package structural.decorator.v2;

/**
 * @Author: 蔡翔
 * @Date: 2019/12/9 10:55
 * @Version 1.0
 */

//AbstractDecorator 和 BatterCake 都是 ABatterCake的子类。
public abstract class AbstractDecorator extends ABatterCake {

    //这个是 AbstractDecorator 和 BatterCake 相联系的关键。
    // 把ABatterCake 这个对象注入进来了。在调用AbstractDecorator这个抽象的装饰者的时候，其实是把抽象方法委托给ABatterCake 来执行。
    private ABatterCake aBatterCake;

    protected abstract void deSomething();

    public AbstractDecorator(ABatterCake aBatterCake) {
        this.aBatterCake = aBatterCake;
    }

    @Override
    protected String getDesc() {
        return this.aBatterCake.getDesc();
    }

    @Override
    protected int cost() {
        return this.aBatterCake.cost();
    }
}
